package com.swt.gap.service.impl;

import com.github.pagehelper.Page;
import com.swt.gap.dao.FileClassDao;
import com.swt.gap.dao.FileDao;
import com.swt.gap.model.entity.File;
import com.swt.gap.model.entity.FileClass;
import com.swt.gap.model.vo.FileClassCountVO;
import com.swt.gap.model.vo.fileclass.AddOrUpdateFileClassModel;
import com.swt.gap.model.vo.fileclass.UserFileClassVO;
import com.swt.gap.service.FileClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author zqw
 * @date 2020/5/11 18:27
 */

@Service
public class FileClassServiceImpl implements FileClassService {

    @Autowired
    private FileClassDao fileClassDao;
    @Autowired
    private FileDao fileDao;
    @Override
    public int addOrUpdateFileClass(AddOrUpdateFileClassModel addOrUpdateFileClassModel,Integer userId) {
        FileClass fileClass = new FileClass();
        fileClass.setClassName(addOrUpdateFileClassModel.getFileClassName());
        //更新
        if (addOrUpdateFileClassModel.getFileClassId()<1){
            fileClass.setCreateBy(userId);
            fileClass.setFileFromType(2);
            fileClass.setIsDeleted(false);
            fileClassDao.insertSelective(fileClass);
            return fileClass.getFileClassId();
        }else {
            //更新
            fileClass.setFileClassId(addOrUpdateFileClassModel.getFileClassId());
               fileClassDao.updateByPrimaryKeySelective(fileClass);
            return fileClass.getFileClassId();
        }
    }

    @Override
    public int countSameName(int userId, String fileClassName, int fileClassId) {
        if (fileClassId < 1 ) {
            return fileClassDao.countSameName(userId, fileClassName, null);
        }else {
            return fileClassDao.countSameName(userId, fileClassName, fileClassId);
        }
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteFileClass(int fileClassId) {
        //软删除数据类别信息
        FileClass fileClass = new FileClass();
        fileClass.setFileClassId(fileClassId);
        fileClass.setIsDeleted(true);

        //软删除数据类别信息下的文件信息
        File file = new File();
        file.setIsDeleted(true);
        file.setFileClassId(fileClassId);
        fileDao.updateByFileClassId(file);

        return  fileClassDao.updateByPrimaryKeySelective(fileClass);
    }

    @Override
    public List<UserFileClassVO> searchFileClass(int userId, String keyword, int fileClassId) {
        return null;
    }

    @Override
    public Page<UserFileClassVO> getUserFileClassList(List<Integer> userIds, String keyword, Integer fileClassId) {
        return fileClassDao.getUserFileClassList(userIds,keyword,fileClassId);
//        return userFileClassVOList;
    }

    @Override
    public FileClassCountVO countFileByClass(List<Integer> userIds, String keyword, Integer fileClassId) {
        List<UserFileClassVO> userFileClasses =  fileClassDao.getUserFileClassList(userIds,keyword,fileClassId);
        return FileClassCountVO.builder()
                .totalCount(userFileClasses.stream().mapToInt(UserFileClassVO::getFileCount).sum())
                .classCount(userFileClasses)
                .build();
    }

    @Override
    public FileClass selectFileClassById(Integer fileClassId) {
        return fileClassDao.selectByPrimaryKey(fileClassId);
    }

}
